#include<bits/stdc++.h>
using namespace std;
//记忆化搜索
#define int long long
int n, m;
int h[200][200];
int s[200][200];
//	int vis[n][m];
//	memset(vis, 0, sizeof(vis));
int dx[4] = {0, 0, -1, 1}, dy[4] = {1, -1, 0, 0};
//	int f = 0, g = 0, Max =  0;
int dfs(int x, int y)
{
	if (s[x][y]) {
		return s[x][y];
	}
	s[x][y] = 1;
	for (int i = 0; i < 4; i++) {
		int tx = x + dx[i];
		int ty = y + dy[i];
		if (tx < 0 || ty < 0 || tx >= n || ty >= n || h[x][y] <= h[tx][ty]) {
//		if (tx > 0 && ty > 0 && tx < n && ty < n && h[tx][ty] > h[x][y]) {
			continue;
		}

		dfs(tx, ty);
		s[x][y] = max(s[x][y], s[tx][ty] + 1);

	}
	return s[x][y];
}
signed main()
{
	cin >> n >> m;
	// 输入
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> h[i][j];
//			if (h[i][j] > Max) {
//				Max = h[i][j];
//				f = i;
//				g = j;
//		}
		}
	}
	int ans = 0;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			ans = max(ans, dfs(i, j));
		}
	}
	cout << ans << endl;

	return 0;
}
